home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / AMIGA / (A)TB / (A)TBR.ADF / Bootgames / InstallBootout.s < prev    next >
Text File  |  1991-10-02  |  17KB  |  1,003 lines

  1. ************************************************************
  2. *
  3. *  BOOTBLOCK INSTALLER (C) PAUL HAYTER 1990
  4. *   WORKS FROM BOTH CLI AND WORKBENCH
  5. *
  6. ************************************************************
  7.  
  8. * This one is for installing BootOut.
  9.  
  10. _AbsExecBase    equ    4
  11. _LVOFindTask    equ    -294
  12. pr_CLI        equ    172
  13. pr_MsgPort    equ    92
  14. _LVOWaitPort    equ    -384
  15. _LVOGetMsg    equ    -372
  16. _LVOForbid    equ    -132
  17. _LVOReplyMsg    equ    -378
  18.  
  19.  
  20. startup:            ; reference for Wack users
  21.     move.l   sp,initialSP   ; initial task stack pointer
  22.     move.l   d0,dosCmdLen
  23.     move.l   a0,dosCmdBuf
  24.  
  25.     ;------ get Exec's library base pointer:
  26.     move.l   _AbsExecBase,a6
  27.  
  28.     ;------ get the address of our task
  29.     suba.l   a1,a1
  30.     jsr    _LVOFindTask(a6)
  31.     move.l   d0,a4
  32.  
  33.     ;------ are we running as a son of Workbench?
  34.     tst.l   pr_CLI(A4)
  35.     beq.s   fromWorkbench
  36.  
  37. ;=======================================================================
  38. ;====== CLI Startup Code ===============================================
  39. ;=======================================================================
  40. fromCLI:
  41.  
  42.     ;------   collect parameters:
  43.     move.l   dosCmdLen,d0
  44.     move.l   dosCmdBuf,a0
  45.  
  46.  
  47.     ;------ call C main entry point
  48.     jsr   _main
  49.  
  50.     ;------ return success code:
  51.     moveq.l   #0,D0
  52.     move.l   initialSP,sp   ; restore stack ptr
  53.     rts
  54.  
  55. ;=======================================================================
  56. ;====== Workbench Startup Code =========================================
  57. ;=======================================================================
  58. fromWorkbench:
  59.  
  60.     ;------ we are now set up.  wait for a message from our starter
  61.     bsr.s   waitmsg
  62.  
  63.     ;------ save the message so we can return it later
  64.     move.l   d0,_WBenchMsg
  65.  
  66.     ;------ push the message on the stack for wbmain
  67.     move.l   d0,-(SP)
  68.     clr.l   -(SP)      indicate: run from Workbench
  69.  
  70. domain:
  71.     jsr   _main
  72.     moveq.l   #0,d0      Successful return code
  73.  
  74.  
  75. *
  76. ************************************************************************
  77.  
  78. exit2:
  79.     move.l  initialSP,SP   ; restore stack pointer
  80.     move.l   d0,-(SP)   ; save return code
  81.  
  82.     ;------ close DOS library:
  83.     move.l   _AbsExecBase,A6
  84.  
  85.     ;------ if we ran from CLI, skip workbench cleanup:
  86.     tst.l   _WBenchMsg
  87.     beq.s   exitToDOS
  88.  
  89.  
  90.     ;------ return the startup message to our parent
  91.     ;------   we forbid so workbench can't UnLoadSeg() us
  92.     ;------   before we are done:
  93.     jsr    _LVOForbid(a6)
  94.     move.l   _WBenchMsg,a1
  95.     jsr    _LVOReplyMsg(a6)
  96.  
  97.     ;------ this rts sends us back to DOS:
  98. exitToDOS:
  99.     move.l   (SP)+,d0
  100.     rts
  101.  
  102.  
  103. ;-----------------------------------------------------------------------
  104. ; This routine gets the message that workbench will send to us
  105. ; called with task id in A4
  106.  
  107.  
  108. waitmsg:
  109.     lea   pr_MsgPort(A4),a0     * our process base
  110.     jsr    _LVOWaitPort(a6)
  111.     lea   pr_MsgPort(A4),a0     * our process base
  112.     jsr    _LVOGetMsg(a6)
  113.     rts
  114.  
  115.  
  116. ************************************************************************
  117.  
  118. *   DATA
  119.  
  120. ************************************************************************
  121.  
  122.  
  123.  
  124. initialSP   dc.l   0
  125. _WBenchMsg   dc.l   0
  126.  
  127. dosCmdLen   dc.l   0
  128. dosCmdBuf   dc.l   0
  129.  
  130. _main
  131.  
  132. ********PUT YOUR PROGRAM HERE***************************
  133. ;INSTALL PROGRAM WITH REQUESTER    
  134.  
  135.  
  136. ************************************************************************
  137. *
  138. * External EXEC references
  139. _LVOSupervisor    EQU    -6*5
  140. _LVOFindResident    EQU    -6*16
  141. _LVOAllocMem    EQU    -6*33
  142. _LVOFreeMem    EQU    -6*35
  143. ;_LVOFindTask    EQU    -6*49
  144. _LVOOpenLibrary    EQU    -6*68
  145. _LVOCloseLibrary    EQU    -6*69
  146. _LVOOpenDevice    EQU    -6*74
  147. _LVOCloseDevice    EQU    -6*75
  148. _LVODOIO        EQU    -6*76
  149. *
  150.  
  151. * Intuition Stuff
  152. _LVOAutoRequest    equ    -348
  153. _LVODisplayBeep    equ    -96
  154.  
  155.  
  156.  
  157.  
  158. *
  159. * Setup global registers
  160.     MOVEA.L    4,A6        ; ExecBase
  161. *
  162. * Open intuition
  163.     MOVEQ    #0,D0
  164.     LEA    intname(PC),A1
  165.     JSR    _LVOOpenLibrary(A6)
  166.     MOVEA.L    D0,A6
  167.     move.l    d0,intbase
  168.     TST.L    D0
  169.     BNE.S    LibraryOpen
  170.     rts
  171.  
  172. LibraryOpen
  173.     sub.l    a0,a0
  174.     lea    bodytext(pc),a1
  175.     lea    PText(pc),a2
  176.     lea    NText(pc),a3
  177.     moveq    #0,d0
  178.     moveq    #0,d1
  179.     move.l    #350,d2
  180.     move.l    #100,d3
  181.     jsr    _LVOAutoRequest(a6)
  182.     move.l    $4,a6
  183.     sub.l    a4,a4
  184.     moveq    #1,d4
  185.     tst.l    d0
  186.     beq    MadeIt
  187.  
  188. *********************
  189.         SUBA.L    A4,A4        ; Pointer to memory buffer
  190.         LEA    DiskIOReq(PC),A3    ; Pointer to disk I/O Request
  191.         MOVEQ    #0,D6        ; Completion result
  192. ;        MOVE.L    A7,D5        ; Stack pointer
  193.         MOVEQ    #1,D4        ; Disk opened flag <>0 <>open
  194.  
  195.  
  196.  
  197.         MOVE.L    #$10002,D1
  198.         MOVE.L    #1024,D0    ; Boot block size
  199.         JSR    _LVOAllocMem(A6)
  200.         TST.L    D0
  201.         Bne.S    keepgoing
  202.         bsr    MissedIt
  203.         bra    MadeIt
  204. keepgoing
  205.         MOVEA.L    D0,A4
  206. *
  207. * Now we copy the payload into the memory buffer. While doing so we calculate
  208. * the checksum which we will patch into the buffer after the copy.
  209.         MOVEQ    #0,D2        ; Zero checksum
  210.         MOVE.l    #PayloadSize/4-1,D0
  211.         MOVEA.L    A4,A1
  212.         LEA    ThePayload(PC),A0
  213. p1        MOVE.L    (A0)+,D1
  214.         MOVE.L    D1,(A1)+    ; Shove into buffer
  215.         ADD.L    D1,D2        ; Bump checksum
  216.         BCC.S    p2        ; Did it rollover?
  217.         ADDQ.L    #1,D2        ; Bump by 1 if it rolled
  218. p2        DBF    D0,p1
  219. *
  220. * Patch checksum into buffer
  221.         NOT.L    D2
  222.         MOVE.L    D2,4(A4)
  223. *
  224. * Init the port to use to access the trackdisk.device
  225.         SUBA.L    A1,A1
  226.         JSR    _LVOFindTask(A6)    ;get current task
  227.         LEA    DiskPort(PC),A0
  228.         MOVE.L    D0,16(A0)
  229. *
  230. * Open the disk device
  231.         MOVEQ    #0,D1        ;flags
  232.         MOVEQ    #0,D0        ;unit number
  233.         MOVEA.L    A3,A1        ;ptr to IOreq
  234.         LEA    DiskName(PC),A0    ;TrackDisk.device
  235.         JSR    _LVOOpenDevice(A6)
  236.         MOVE.L    D0,D4            ; Record if we opened device
  237.         Beq.S    write_boot
  238.         bsr.s    MissedIt
  239.         bra.s    MadeIt
  240. *
  241. * Write payload to the disk 
  242. write_boot    MOVEA.L    A3,A1
  243.         MOVE.L    A4,40(A1)        ; Pointer to Payload buffer
  244.         JSR    _LVODOIO(A6)
  245.         TST.L    D0
  246.         Beq.S    flush_buffer
  247.         bsr.s    MissedIt
  248.         bra.s    MadeIt
  249.  
  250. *
  251. * Flush data from track buffer onto the disk
  252. flush_buffer    MOVEA.L    A3,A1
  253.         MOVE.W    #4,28(A1)
  254.         JSR    _LVODOIO(A6)
  255.         TST.L    D0
  256.         Beq.S    Motor_off
  257.         bsr.s    MissedIt
  258. *
  259. * Shutdown the motor
  260. Motor_off        MOVEA.L    A3,A1
  261.         MOVE.W    #9,28(A1)
  262.         CLR.L    36(A1)
  263.         JSR    _LVODOIO(A6)
  264.         TST.L    D0
  265.         BEQ.S    MadeIt
  266.         bsr.s    MissedIt
  267.     
  268. * Send the dog home
  269. MadeIt        MOVEA.L    intbase(pc),A1
  270.         JSR    _LVOCloseLibrary(A6)
  271. *
  272. * Free up the memory buffer if it was allocated
  273.         MOVE.L    A4,D0
  274.         BEQ.S    p4
  275.         MOVEA.L    D0,A1
  276.         MOVE.L    #1024,D0
  277.         JSR    _LVOFreeMem(A6)
  278. *
  279. * Close the disk if we opened it
  280. p4        TST.L    D4
  281.         BNE.S    p5
  282.         MOVEA.L    A3,A1
  283.         JSR    _LVOCloseDevice(A6)
  284. p5        MOVE.L    D6,D0
  285. ;        MOVEA.L    D5,A7
  286.         RTS
  287.  
  288.  
  289. MissedIt    MOVE.L    D0,D6        ; Record error
  290.     move.l    intbase(pc),a6
  291.     move.l    56(a6),a0
  292.     jsr    _LVODisplayBeep(a6)
  293.     move.l    $4,a6
  294.     rts
  295.         CNOP    0,4
  296. *******************************************************************
  297. *
  298. *    BOOTBLOCK CODE GOES HERE
  299. *
  300. ********************************************************************
  301. * Payload, this is the code written to the disk's boot block
  302. PayloadStart
  303. ThePayload
  304. **************************************************************
  305.  
  306.  
  307. *****************************************************
  308. *
  309. *    BOOT-OUT V5.X
  310. *    9th June 1990
  311. *
  312. *****************************************************
  313.  
  314.  
  315. custom    equ    $dff000
  316.  
  317. bltddat    EQU    $000
  318. dmaconr    EQU    $002
  319. vposr      EQU    $004
  320. vhposr     EQU    $006
  321. dskdatr    EQU    $008
  322. joy0dat    EQU    $00A
  323. joy1dat    EQU    $00C
  324. clxdat     EQU    $00E
  325.  
  326. adkconr    EQU    $010
  327. pot0dat    EQU    $012
  328. pot1dat    EQU    $014
  329. potinp     EQU    $016
  330. serdatr    EQU    $018
  331. dskbytr    EQU    $01A
  332. intenar    EQU    $01C
  333. intreqr    EQU    $01E
  334.  
  335. dskpt      EQU    $020
  336. dsklen     EQU    $024
  337. dskdat     EQU    $026
  338. refptr     EQU    $028
  339. vposw      EQU    $02A
  340. vhposw     EQU    $02C
  341. copcon     EQU    $02E
  342. serdat     EQU    $030
  343. serper     EQU    $032
  344. potgo      EQU    $034
  345. joytest    EQU    $036
  346. strequ     EQU    $038
  347. strvbl     EQU    $03A
  348. strhor     EQU    $03C
  349. strlong    EQU    $03E
  350.  
  351. bltcon0    EQU    $040
  352. bltcon1    EQU    $042
  353. bltafwm    EQU    $044
  354. bltalwm    EQU    $046
  355. bltcpt     EQU    $048
  356. bltbpt     EQU    $04C
  357. bltapt     EQU    $050
  358. bltdpt     EQU    $054
  359. bltsize    EQU    $058
  360.  
  361. bltcmod    EQU    $060
  362. bltbmod    EQU    $062
  363. bltamod    EQU    $064
  364. bltdmod    EQU    $066
  365.  
  366. bltcdat    EQU    $070
  367. bltbdat    EQU    $072
  368. bltadat    EQU    $074
  369.  
  370. dsksync    EQU    $07E
  371.  
  372. cop1lc     EQU    $080
  373. cop2lc     EQU    $084
  374. copjmp1    EQU    $088
  375. copjmp2    EQU    $08A
  376. copins     EQU    $08C
  377. diwstrt    EQU    $08E
  378. diwstop    EQU    $090
  379. ddfstrt    EQU    $092
  380. ddfstop    EQU    $094
  381. dmacon     EQU    $096
  382. clxcon     EQU    $098
  383. intena     EQU    $09A
  384. intreq     EQU    $09C
  385. adkcon     EQU    $09E
  386.  
  387. aud        EQU    $0A0
  388. aud0       EQU    $0A0
  389. aud1       EQU    $0B0
  390. aud2       EQU    $0C0
  391. aud3       EQU    $0D0
  392.  
  393.  
  394. bpl1pth      EQU    $0E0
  395. bpl1ptl    equ    $0e2
  396. bpl2pth    equ    $0e4
  397. bpl2ptl    equ    $0e6
  398.  
  399. bplcon0    EQU    $100
  400. bplcon1    EQU    $102
  401. bplcon2    EQU    $104
  402. bpl1mod    EQU    $108
  403. bpl2mod    EQU    $10A
  404.  
  405. bpldat     EQU    $110
  406.  
  407. spr0pth      EQU    $120
  408. spr0ptl      EQU    $122
  409. spr1pth      EQU    $124
  410. spr1ptl      EQU    $126
  411. spr2pth    EQU    $128
  412. spr2ptl    EQU    $12A
  413.  
  414. spr        EQU    $140
  415.  
  416. color00      EQU    $180
  417. color01    equ    $0182
  418. color02    equ    $184
  419. color03    equ    $186
  420. color17    equ    $1a2
  421. color18    equ    $1a4
  422. color19    equ    $1a6
  423. color20    equ    $1a8
  424. color21    equ    $1aa
  425. *** DIFFERENT STUFF FROM EARLY VERSIONS
  426. MEMBASE        equ    $70000
  427. **MEM ALLOCATION RELATIVE TO MEMBASE
  428. oldcop        equ    0
  429. old_mouse        equ    4
  430.  
  431. BitMap        equ    20
  432. RastPort        equ    BitMap+40
  433. sprite0_base    equ    RastPort+104
  434. sprite2_base    equ    sprite0_base+20
  435. copper_base    equ    sprite2_base+24
  436. BitPlane1        equ    1024
  437. BitPlane2        equ    BitPlane1+8000
  438.  
  439. LOFlist        equ    $32
  440. left_mouse    equ    $bfe001
  441.  
  442. _LVOText        equ    -60
  443. _LVOInitRastPort    equ    -198
  444. _LVOMove        equ    -240
  445. _LVOInitBitMap    equ    -390
  446. _LVOSetAPen    equ    -342
  447. _LVOSetBPen    equ    -348
  448. ;_LVOFindResident    equ    -96
  449. _LVORectFill    equ    -306
  450. _LVOReadPixel    equ    -318
  451. _LVOWritePixel    equ    -324
  452. total_bricks    equ    455-38
  453.  
  454. rp_BitMap        equ    4
  455. bm_Planes        equ    8
  456.  
  457. ExecBase        equ    4
  458.  
  459.  
  460. START
  461.  
  462. ;    move.l    ExecBase,A6
  463. ;    bra.s    start2
  464.     dc.b    'DOS',0
  465.     dc.l    0
  466.     dc.l    $0370
  467.     
  468. start2    movem.l    d0-d7/a0-a6,-(a7)
  469.     move.l    (a6),a6
  470.     move.l    (a6),a6        A6=GFXBASE
  471.     lea    MEMBASE,a1
  472.     move.l    a1,a4        A4=MEMBASE
  473. clearmem    clr.l    (a1)+
  474.     move.w    a1,d0
  475.     tst.w    d0
  476.     bpl.s    clearmem
  477.     
  478. ;    bsr    init_spr_ptrs
  479.     bsr    init_data
  480.  
  481.     lea    custom,a5        A5=CUSTOM
  482.     lea    copper_base(a4),a1
  483.     move.w    #$0080,dmacon(a5)
  484.     move.l    LOFlist(a6),oldcop(a4)
  485.     move.l    a1,LOFlist(a6)
  486.     
  487. init_rp_and_bm
  488.     lea    BitMap(a4),a0
  489.     move.l    a0,a2
  490.     moveq    #2,d0
  491.     move.w    #320,d1
  492.     move.w    #200,d2
  493.     jsr    _LVOInitBitMap(a6)
  494.     lea    BitPlane1(a4),a0
  495.     move.l    a0,BitMap+bm_Planes(a4)
  496.     add.w    #8000,a0
  497.     move.l    a0,BitMap+bm_Planes+4(a4)
  498.     lea    RastPort(a4),a1
  499.     move.l    a1,a3            A3=RASTPORT
  500.     jsr    _LVOInitRastPort(a6)
  501.     move.l    a2,rp_BitMap(a3)
  502.  
  503.     move.w    #$83a0,dmacon(a5)
  504.  
  505. draw_screen
  506.     lea    rect_table(pc),a2
  507.     move.w    #total_bricks,real_score-rect_table(a2)
  508.  
  509.     moveq    #3,d7
  510. loop1    move.l    a3,a1
  511.     move.w    (a2)+,d0
  512.     jsr    _LVOSetAPen(a6)
  513.     movem.w    (a2)+,d0-d3
  514.  
  515.     jsr    _LVORectFill(a6)
  516.     dbf    d7,loop1
  517. MAIN2
  518. wait_for_blank
  519.     moveq    #-1,d0
  520.     cmp.b    vhposr(a5),d0
  521.     beq.s    wait_for_blank
  522. wfb2    cmp.b    vhposr(a5),d0
  523.     bne.s    wfb2
  524.  
  525.  
  526. print_headings
  527.     lea    heading_text(pc),a0
  528.     moveq    #text_length,d0
  529.     bsr    print_any_headings
  530.  
  531.  
  532.  
  533. main
  534.  
  535.  
  536. mouse_move_bat
  537.     move.w    joy0dat(a5),d0    
  538.     move.b    old_mouse(a4),d1
  539.     sub.b    d0,d1    previous-current
  540.     ext.w    d1
  541. l41:    move.b    d0,old_mouse(a4)
  542.     moveq    #0,d2
  543.  
  544.     lea    sprite0_base+1(a4),a1
  545.     move.b    (a1),d2
  546.     sub.w    d1,d2
  547.     move.b    d2,(a1)
  548. ***************
  549.  
  550. move_ball
  551.     lea    sprite2_base(a4),a2    A2=sprite2
  552.     move.b    1(a2),d6        get x coord
  553.     move.b    (a2),d7        get y coord
  554.     bsr    spr_coord_conv
  555.     lea    ballxdir(pc),a1    A1=ballxdir
  556.     move.l    a1,d5        D5=BALLXDIR
  557. BALL_DOWN_BOTTOM
  558.     cmp.b    #245,(a2)        check for ball down bottom
  559.     bcs.s    mb4
  560.     neg.b    1(a1)
  561.     lea    man_count(pc),a1
  562.     subq.b    #1,(a1)
  563.     moveq    #$30,d3
  564.     cmp.b    (a1),d3
  565.     bne.s    men_left
  566. no_men_left
  567.     lea    score(pc),a0
  568.  
  569.     move.b    d3,(a0)+
  570.  
  571.     move.b    d3,(a0)+
  572.     move.b    d3,(a0)+
  573.     move.b    #$35,(a1)
  574.  
  575.     subq.b    #3,(a2)
  576.     subq.b    #3,2(a2)
  577.     bra    draw_screen
  578. men_left    
  579.     move.l    d5,a1
  580.  
  581.  
  582. mb4    move.w    clxdat(a5),d0
  583.     btst    #9,d0        BALL TO BAT
  584.     beq.s    mb1
  585.     bsr    deflect_ball
  586. mb1    cmp.b    #68,1(a2)        LEFT BORDER TO BAT
  587.     bcc.s    mb2
  588.     neg.b    (a1)
  589.     
  590. mb2    cmp.b    #218,1(a2)        RIGHT BORDER
  591.     bcs.s    mb22
  592.     neg.b    (a1)
  593. mb22    cmp.b    #44+9,(a2)        ceiling check
  594.     bcc.s    mb23
  595.     neg.b    1(a1)
  596. mb23
  597. NEW_BALL_2_BRICK_COLLISION
  598.     movem.l    a1-a2,-(a7)
  599.     addq.l    #2,d7
  600.     addq.l    #1,d6
  601.     move.l    d6,d0
  602.     move.l    d7,d1
  603.     bsr    read_pixel    UNDER THE BALL
  604.     bne.s    hobo
  605.     move.l    d5,a1
  606.     neg.b    1(a1)    REVERSE Y DIRECTION
  607.     bsr    rub_brick
  608.     addq.w    #7,d6
  609.     bsr    read_pixel    CHECK PIXEL TO RIGHT
  610.     bne.s    hobo2
  611.     move.l    d5,a1
  612.     neg.b    (a1)
  613. hobo2    sub.w    #14,d6
  614.     bsr    read_pixel    CHECK PIXEL TO LEFT
  615.     bne.s    hobo3
  616.     move.l    d5,a1
  617.     neg.b    (a1)
  618. hobo3
  619.     
  620. hobo    movem.l    (a7)+,a1-a2
  621.  
  622.     
  623. mb3    
  624.     move.b    (a1),d0
  625.     add.b    d0,1(a2)
  626.     move.b    1(a1),d0
  627.     add.b    d0,(a2)
  628.     add.b    d0,2(a2)
  629.  
  630.  
  631. ************
  632.  
  633.     lea    real_score(pc),a0
  634.     tst.w    (a0)
  635.     bpl.s    wait
  636.     lea    goal_text(pc),a0
  637.     moveq    #goal_length,d0
  638.     bsr.s    print_any_headings
  639. endgame    btst    #10,potinp(a5)
  640.     bne.s    endgame
  641.     bra.s    exit
  642.     
  643. wait    btst    #10,potinp(a5)
  644.     bne    MAIN2
  645.  
  646.  
  647.     
  648. exit    move.w    #$0080,dmacon(a5)
  649.     move.l    oldcop(a4),LOFlist(a6)
  650.     move.w    #$83a0,dmacon(a5)
  651.     movem.l    (a7)+,d0-d7/a0-a6
  652. ;    bra.s    go_home
  653.     lea    dosname(pc),a1
  654.     jsr    _LVOFindResident(a6)
  655.     move.l    d0,a0
  656.     move.l    $16(a0),a0
  657.  
  658. go_home    moveq    #0,d0
  659.     rts
  660.  
  661.     
  662.  
  663. print_any_headings
  664.     movem.l    a0/d0,-(a7)
  665.     move.l    a3,a1
  666.     moveq    #3,d0
  667.     jsr    _LVOSetAPen(a6)
  668.     moveq    #1,d0
  669.     jsr    _LVOSetBPen(a6)
  670.     
  671.     
  672.     moveq    #7,d1
  673.     moveq    #4,d0
  674.     jsr    _LVOMove(a6)
  675.     movem.l    (a7)+,a0/d0
  676.     jmp    _LVOText(a6)
  677.  
  678.  
  679.  
  680.  
  681. deflect_ball
  682.     lea    sprite0_base+1(a4),a0
  683.     move.b    1(a2),d1
  684.     move.b    (a0),d0
  685.     sub.b    d0,d1
  686.     addq.b    #3,d1
  687. ;    move.b    d1,d2
  688. ;    add.b    #$30,d2
  689. ;    move.b    d2,score+3
  690.  
  691.     move.b    (a1),d0    get ballxdir
  692.     asr.b    #1,d0
  693.     or.b    #1,d0
  694.     move.b    d0,(a1)
  695.     
  696.     
  697.     cmp.b    #$c,d1
  698.     blt.s    othertests1
  699. faster    asl.b    #1,d0
  700.     move.b    d0,(a1)
  701.     bra.s    dfb2
  702. othertests1
  703.     cmp.b    #0,d1
  704.     ble.s    faster
  705.     
  706.     cmp.b    #6,d1    middle of bat
  707.     bgt.s    right_side
  708. left_side
  709.     tst.b    d0
  710.     bmi.s    lef1
  711.     neg.b    (a1)    ballxdir
  712. lef1    
  713.  
  714.     bra.s    dfb2
  715. right_side
  716.     tst.b    d0
  717.     bpl.s    dfb2
  718.     neg.b    (a1)
  719.  
  720. dfb2    neg.b    1(a1)    ballydir
  721.     bmi.s    dfb3
  722.     neg.b    1(a1)
  723. dfb3    rts
  724.     
  725.  
  726. spr_coord_conv
  727. * Entry- D6=sprite x, D7=sprite y
  728. * Exit-  D6=screen x, D7=screen y
  729.     moveq    #0,d0
  730.     moveq    #0,d1
  731.     move.b    d7,d1
  732.     sub.w    #44,d1
  733.     move.b    d6,d0
  734.     add.w    d0,d0
  735.     sub.w    #128,d0
  736.     move.l    d0,d6
  737.     move.l    d1,d7
  738.     rts
  739.     
  740.     
  741.  
  742.  
  743.  
  744.  
  745. update_score
  746.     lea    score+3(pc),a2
  747. us_1    addq.b    #1,-(a2)
  748.     cmp.b    #$3a,(a2)
  749.     bne.s    us_2
  750.     move.b    #$30,(a2)
  751.     bra.s    us_1
  752. us_2    rts
  753.  
  754. rub_brick
  755.     move.l    a3,a1
  756.     moveq    #0,d0
  757.     jsr    _LVOSetAPen(a6)
  758.     
  759.     move.l    d6,d0
  760.     move.l    d7,d1
  761.     and.w    #$fff8,d0
  762.     and.w    #$fff8,d1
  763.     move.w    d0,d2
  764.     addq.w    #7,d2
  765.     move.w    d1,d3
  766.     addq.w    #7,d3
  767.     jsr    _LVORectFill(a6)
  768.     bsr.s    update_score
  769.  
  770.     lea    real_score(pc),a0
  771.     subq.w    #1,(a0)
  772.     rts
  773.     
  774.  
  775.  
  776. read_pixel
  777.     move.l    d6,d0
  778.     move.l    d7,d1
  779.     move.l    a3,a1
  780.     jsr    _LVOReadPixel(a6)
  781.     cmp.b    #2,d0
  782.     rts
  783.  
  784. init_data
  785.     lea    sprite0(pc),a1
  786.     lea    sprite0_base(a4),a0
  787.     bsr.s    do_sprites
  788. idx2    move.l    (a1)+,d0
  789.     move.l    d0,(a0)+
  790.     btst    #16,d0
  791.     beq.s    idx2
  792.     move.l    (a1)+,(a0)+    turn on dma instruction
  793.     move.w    (a1)+,d0        get starting wait
  794.     moveq    #-2,d1
  795.     swap    d0        D0=$3c01xxxx
  796.     move.w    d1,d0        should be $3C01FFFE
  797.     move.w    #color02,d1
  798.     swap    d1
  799. idx3    move.w    (a1)+,d1        should $0184XXXX
  800.     bmi.s    no_more_copper    terminate with $ffff
  801.     move.l    d0,(a0)+
  802.     move.l    d1,(a0)+
  803.     add.l    #$08000000,d0
  804.     bra.s    idx3
  805. no_more_copper
  806.     moveq    #-2,d0
  807.     move.l    d0,(a0)+    
  808.     rts
  809.     
  810.  
  811. do_sprites
  812.  
  813.     moveq    #2,d2
  814.     bsr.s    dothem
  815.     moveq    #3,d2
  816. dothem    move.l    (a1)+,(a0)+    control words
  817. doug1    moveq    #0,d0
  818.     move.w    (a1)+,d0
  819.     swap    d0
  820.     move.l    d0,(a0)+
  821.     dbf    d2,doug1
  822.     clr.l    (a0)+        
  823.     rts
  824.         
  825.  
  826. ballxdir    dc.b    $ff
  827. ballydir    dc.b    $fe
  828. real_score
  829.     dc.w    total_bricks
  830.  
  831. rect_table    dc.w    1,0,0,7,199
  832.         dc.w    1,0,0,319,9
  833.         dc.w    1,312,0,319,199
  834.         dc.w    2,8,16,311,103
  835.  
  836.     
  837. sprite0    dc.w    $f080,$f300
  838.     dc.w    $ffff
  839.     dc.w    $ffff
  840.     dc.w    $ffff
  841. ;    dc.w    0,0    
  842.     
  843. sprite2    dc.w    $c080,$c400
  844.     dc.w    $6000
  845.     dc.w    $f000
  846.     dc.w    $f000
  847.     dc.w    $6000
  848. ;    dc.w    0,0
  849.     
  850. copper_list
  851.     dc.w    bplcon0,$0200
  852.     dc.w    bplcon1,0
  853.     dc.w    bpl1mod,0
  854.     dc.w    ddfstrt,$0038
  855.     dc.w    ddfstop,$00d0
  856.     dc.w    diwstrt,$2c81
  857.     dc.w    diwstop,$f4c1
  858.     dc.w    bpl1pth,(MEMBASE+BitPlane1)/65536
  859.     dc.w    bpl1ptl,BitPlane1
  860.     dc.w    bpl2pth,(MEMBASE+BitPlane2)/65536
  861.     dc.w    bpl2ptl,BitPlane2
  862.     dc.w    spr0pth
  863. spr0high    dc.w    (MEMBASE+sprite0_base)/65536
  864.     dc.w    spr0ptl
  865.     dc.w    sprite0_base
  866.     dc.w    spr2pth
  867. spr2high    dc.w    (MEMBASE+sprite2_base)/65536
  868.     dc.w    spr2ptl
  869.     dc.w    sprite2_base
  870.     dc.w    clxcon,$0082
  871.     dc.w    color21,$00f0
  872.     dc.w    color17,$0ff0
  873.  
  874.     dc.w    color00,$0000
  875.     dc.w    color01,$0fff
  876.     dc.w    color02,$0f00
  877.     dc.w    color03,$0088
  878.     dc.w    $2001,$fffe
  879.  
  880.     dc.w    bplcon0,$2200
  881.     dc.w    $3c01
  882.     dc.w    $0f00
  883.     
  884.  
  885.     dc.w    $0e00
  886.     dc.w    $0d00
  887.     dc.w    $0c00
  888.     dc.w    $0b00
  889.     dc.w    $0a00
  890.     dc.w    $0900
  891.     dc.w    $0800
  892.     dc.w    $0700
  893.     dc.w    $0600
  894.     dc.w    $ffff
  895.  
  896.  
  897. heading_text    dc.b    'BootOut V5.'
  898. man_count        dc.b    $35
  899.         dc.b    ' ',$a9,' Paul Hayter '
  900. score        dc.b    $30,$30,$30,$30
  901. hd_end
  902. *             BootOut V5.5 C Paul HAYTER
  903. goal_text        dc.b    'Good One Mate!!           :'
  904. goal_end
  905.  
  906. dosname        dc.b    'dos.library',0
  907. goal_length    equ    goal_end-goal_text
  908. text_length    equ    hd_end-heading_text
  909.     
  910.  
  911.     cnop    0,4    
  912. ***************************************************************
  913. PayloadEnd
  914. PayloadSize    EQU    PayloadEnd-PayloadStart
  915.     cnop 0,4
  916.     
  917. DiskName    DC.B    'trackdisk.device',0
  918.  
  919. DiskPort    DC.L    0    ;0
  920.         DC.L    0    ;4
  921.         DC.W    $0400    ;8
  922.         DC.L    0    ;10
  923.         DC.B    0    ;14
  924.         DC.B    31    ;15
  925.         DC.L    0    ;16    Task addr goes here
  926. LH1        DC.L    LH2    ;20
  927. LH2        DC.L    0    ;24
  928.         DC.L    LH1    ;28
  929.         DC.B    0    ;32
  930.         DC.B    0    ;33
  931.  
  932. DiskIOReq        DC.L    0    ;0
  933.         DC.L    0    ;4
  934.         DC.B    5    ;8
  935.         DC.B    0    ;9
  936.         DC.L    0    ;10
  937.         DC.L    DiskPort ;14
  938.         DC.W    48    ;18
  939.         DC.L    0    ;20
  940.         DC.L    0    ;24
  941.         DC.W    3    ;28 IO_CMD
  942.         DC.W    0    ;30
  943.         DC.L    0    ;32
  944.         DC.L    1024    ;36 IO_LENGTH
  945.         DC.L    0    ;40 IO_DATA
  946.         DC.L    0    ;44 IO_OFFSET
  947.         DC.L    0
  948.         DC.L    0
  949.  
  950. bodytx1    dc.b    'BOOTOUT V5.X Installer',0
  951. bodytx2    dc.b    '(C) 1990 Paul Hayter',0
  952. Ptx    dc.b    'INSTALL DF0:',0
  953. Ntx    dc.b    '  CANCEL!   ',0
  954.     
  955.     even
  956.  
  957. bodytext2    dc.b    0
  958.     dc.b    1
  959.     dc.w    0
  960.     dc.w    8
  961.     dc.w    20
  962.     dc.l    0
  963.     dc.l    bodytx2
  964.     dc.l    0
  965.         
  966.     
  967. bodytext    dc.b    0
  968.     dc.b    1
  969.     dc.w    0
  970.     dc.w    8
  971.     dc.w    10
  972.     dc.l    0
  973.     dc.l    bodytx1
  974.     dc.l    bodytext2
  975.  
  976. PText    dc.b    0
  977.     dc.b    1
  978.     dc.w    0
  979.     dc.w    5
  980.     dc.w    4
  981.     dc.l    0
  982.     dc.l    Ptx
  983.     dc.l    0
  984.     
  985. NText    dc.b    0
  986.     dc.b    1
  987.     dc.w    0
  988.     dc.w    5
  989.     dc.w    4
  990.     dc.l    0
  991.     dc.l    Ntx
  992.     dc.l    0
  993.  
  994.  
  995.  
  996.  
  997. MYdosname        dc.b    'dos.library',0
  998. intname        dc.b    'intuition.library',0
  999.     even
  1000. intbase        dc.l    0
  1001.     
  1002.         END
  1003.